#include "visit.h"

variant<int, float, string> visit_initVal(ASTNode* node, SymbolTable* s, Module* m, BasicBlock* bb) {
    if (!node){
        variant<int, float, string> res;
        res = 0;
        return res;
    }

    
    ASTNode* child = node->children[0];
    if(child->type == "exp"){
        variant<int, float, string> res = visit_exp(node->children[0], s, m, bb);

        return res;
    }
    //     if(auto pval = std::get_if<string>(&res)){
    //         Symbol* symbol_ident = s -> lookup(*pval);
    //         if(symbol_ident -> kind == VAR || symbol_ident -> kind == CONST){
    //             if(symbol_ident -> type == "int"){
    //                 LoadInst::create_load(m->get_int32_type(), symbol_ident->alloc, bb);
    //                 variant<int, float> res = int(symbol_ident -> value);
    //                 return res;
    //             }
    //             else if(symbol_ident -> type == "float"){
    //                 LoadInst::create_load(m->get_float_ptr_type(), symbol_ident->alloc, bb);
    //                 variant<int, float> res = float(symbol_ident -> value);
    //                 return res;
    //             }
    //             else {
    //                 std::cerr << "visit_initVal :" << "不支持的类型: " << symbol_ident -> type << std::endl;
    //                 throw std::invalid_argument(string("visit_initVal :") + "不支持的类型: " + symbol_ident -> type);
    //             }
    //         }
    //         else{
    //             std::cerr << "visit_initVal :" << "不支持的类型: " << symbol_ident -> kind << std::endl;
    //             throw std::invalid_argument(string("visit_initVal :") + "不支持的类型: " + to_string(symbol_ident -> kind));
    //         }
    //     }
    //     else if(auto pval = std::get_if<int>(&res)){
    //         variant<int, float> ret = *pval;
    //         return ret;
    //     } 
    //     else if(auto pval = std::get_if<float>(&res)){
    //         variant<int, float> ret = *pval;
    //         return ret;
    //     }
        
            
    // }
}